package com.breaktian.assemble.image;

import java.io.File;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.BitmapImageViewTarget;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.widget.ImageView;

/**
 * Created by breaktian on 2016/6/21.
 * glide
 * 注意事项：
 * 1.最好使用Activity/Fragment作为with()参数，
 * 好处是：图片加载会和Activity/Fragment的生命周期保持一致，
 * 请求会在onStop的时候自动暂停，在onStart的时候重新启动,
 * gif的动画也会在onStop的时候停止，以免在后台消耗电量。
 * 2.不要再非主线程里面使用Glide加载图片，
 * 如果真的使用了，请把context参数换成getApplicationContext。
 *
 * eclipse formater
 */
public class GlideImageLoaderProvider implements BaseImageLoaderProvider {



    /**
     * 从url加载图片
     * */
    @Override
    public void loadImage(Context context, String url, ImageView imageView) {
        Glide.with(context)
                .load(url)
                .into(imageView);
    }

    /**
     * 从url加载图片
     * */
    @Override
    public void loadImage(Context context, String url, ImageView imageView, int placeholder) {
        Glide.with(context)
                .load(url)
                .placeholder(placeholder)
                .into(imageView);
    }

    /**
     * 从url加载图片,并指定显示方式
     * */
    @Override
    public void loadImage(Context context, String url, ImageView imageView, ImageUtils.DisplayType displaytype) {
        switch (displaytype){
            case CENTERCROP:
                Glide.with(context)
                        .load(url)
                        .centerCrop()
                        .into(imageView);
                break;
            case FITCENTER:
                Glide.with(context)
                        .load(url)
                        .fitCenter()
                        .into(imageView);
                break;
            default:
                Glide.with(context)
                        .load(url)
                        .centerCrop()
                        .into(imageView);
                break;

        }
    }

    /**
     * 从url加载图片,并指定显示方式
     * */
    @Override
    public void loadImage(Context context, String url, ImageView imageView, int placeholder, ImageUtils.DisplayType displaytype) {
        switch (displaytype){
            case CENTERCROP:
                Glide.with(context)
                        .load(url)
                        .placeholder(placeholder)
                        .centerCrop()
                        .into(imageView);
                break;
            case FITCENTER:
                Glide.with(context)
                        .load(url)
                        .placeholder(placeholder)
                        .fitCenter()
                        .into(imageView);
                break;
            default:
                Glide.with(context)
                        .load(url)
                        .centerCrop()
                        .into(imageView);
                break;

        }
    }


    /**
     * 加载图片并且调整图片大小
     * */
    @Override
    public void loadResizeImage(Context context, String url, ImageView imageView, int width, int height){
        Glide.with(context)
                .load(url)
                .override(width, height)
                .into(imageView);
    }

    /**
     * 加载图片并且调整图片大小
     * */
    @Override
    public void loadResizeImage(Context context, String url, ImageView imageView, int placeholder, int width, int height){
        Glide.with(context)
                .load(url)
                .placeholder(placeholder)
                .override(width, height)
                .into(imageView);

    }


    /**
     * 加载圆形图片
     * */
    @Override
    public void loadRoundImage(final Context context, String url, final ImageView imageView) {
        Glide.with(context).load(url).asBitmap().centerCrop().into(new BitmapImageViewTarget(imageView) {
            @Override
            protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
                circularBitmapDrawable.setCircular(true);
                imageView.setImageDrawable(circularBitmapDrawable);
            }
        });
    }

	/**
	 * 加载圆形图片
	 * 从资源文件加载
	 */
	@Override
	public void loadRoundImage(final Context context, int resid, final ImageView imageView) {
		Glide.with(context).load(resid).asBitmap().centerCrop()
				.into(new BitmapImageViewTarget(imageView) {
					@Override
					protected void setResource(Bitmap resource) {
						RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory
								.create(context.getResources(), resource);
						circularBitmapDrawable.setCircular(true);
						imageView.setImageDrawable(circularBitmapDrawable);
					}
				});
	}

    /**
     * 加载gif
     * */
    public void loadGif(Context context, String url, ImageView imageView, int error){
        Glide.with( context )
                .load(url)
                .asGif()
                .error(error)
				.diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .into(imageView);
    }

	/**
	 * 加载gif
	 * 资源文件
	 */
	public void loadGif(Context context, int resid, ImageView imageView) {
		Glide.with(context).load(resid).asGif().crossFade()
				.diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
	}

	/**
	 * 加载video
	 */
	public void loadVideo(Context context, String url, ImageView imageView, int placeholder,
                          int error) {
		Glide.with(context).load(url).placeholder(placeholder).error(error).into(imageView);
	}


    /**
     * 从文件加载图片
     * */
    @Override
    public void loadImage(Context context, File file, ImageView imageView) {
        Glide.with(context)
                .load(file)
                .into(imageView);
    }

    /**
     * 从Uri加载图片
     * */
    @Override
    public void loadImage(Context context, Uri uri, ImageView imageView) {
        Glide.with(context)
                .load(uri)
                .into(imageView);
    }


    /**
     * 从recourceId加载图片
     * */
    @Override
    public void loadImage(Context context, int recourceId, ImageView imageView) {
        Glide.with(context)
                .load(recourceId)
                .into(imageView);
    }

}
